package leetCode.Test2;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zwei
 * @create 2024-08-19 9:36
 */
public class IsIsomorphic {
    //给定两个字符串 s 和 t ，判断它们是否是同构的。
    //如果 s 中的字符可以按某种映射关系替换得到 t ，那么这两个字符串是同构的。
    //每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，
    // 相同字符只能映射到同一个字符上，字符可以映射到自己本身。
    public static void main(String[] args) {
        String s="acb";
        String t="cdd";
        System.out.println(isIsomorphic(s,t));
    }
    public static boolean isIsomorphic(String s,String t){
        //s2t 用来存储 s 到 t 的字符映射
        Map<Character, Character> s2t = new HashMap<Character, Character>();
        //t2s 用来存储 t 到 s 的字符映射
        Map<Character, Character> t2s = new HashMap<Character, Character>();
        int len = s.length();
        for (int i = 0; i < len; ++i) {
            char x = s.charAt(i), y = t.charAt(i);
            //判断 s 中的字符 x 是否已经被映射过，并且映射的字符不是 t 中的字符 y  ||判断 t 中的字符 y 是否已经被映射过，并且映射的字符不是 s 中的字符 x
            if ((s2t.containsKey(x) && s2t.get(x) != y) || (t2s.containsKey(y) && t2s.get(y) != x)) {
                return false;
            }
            //如果字符 x 和 y 是第一次出现，或者它们已经被映射到对方，则更新映射关系
            s2t.put(x, y);
            t2s.put(y, x);
        }
        return true;
    }
}
